/* 全局变量定义 */
/* 动态加载进度显示框 */
var loadingTpl = '<div class="modal fade" id="loading-prog-model" tabindex="-1" role="dialog" '+
                 'aria-labelledby="loading-prog-title" aria-hidden="true" data-backdrop="static"> '+
                    '<div class="modal-dialog margin-top"> '+
                        '<div class="modal-content"> '+
                            '<div class="box box-solid"> '+
                                '<div class="box-body" id="loading-prog-content"> '+
                                    '拼命加载中...'+
                                '</div>'+
                                '<div class="overlay">'+
                                    '<i class="fa fa-refresh fa-spin"></i>'+
                                '</div>'+
                            '</div>'+
                        '</div>'+
                    '</div>'+
                '</div>';
/* 操作结果提示框 */
var retTipTpl = '<div class="modal fade" id="opr-tip-model" tabindex="-1" role="dialog" style="overflow-y:scroll;" '+ 
                'aria-labelledby="opr-tip-title" aria-hidden="true">'+
                    '<div class="modal-dialog margin-top">'+
                        '<div class="modal-content">'+
                            '<div class="modal-header" id="opr-tip-header">'+
                                '<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>'+
                                '<h4 class="modal-title" id="opr-tip-title"><!-- 提示标题 --></h4>'+
                            '</div>'+
                            '<div class="modal-body" id="opr-tip-content"><!-- 提示内容 --></div>'+
                            '<div class="modal-footer h-align-center">'+
                                '<button class="btn btn-default h-element-gap" data-dismiss="modal">关闭</button>'+
                            '</div>'+
                        '</div>'+
                    '</div>'+
                '</div>';

/* 操作确认提示框 */
var promptTpl = '<div class="modal fade" id="opr-prompt-model" tabindex="-1" role="dialog" style="overflow-y:scroll;" '+ 
                'aria-labelledby="opr-prompt-title" aria-hidden="true">'+
                    '<div class="modal-dialog margin-top">'+
                        '<div class="modal-content">'+
                            '<div class="modal-header bg-green" id="opr-prompt-header">'+
                                '<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>'+
                                '<h4 class="modal-title" id="opr-prompt-title">操作提示</h4>'+
                            '</div>'+
                            '<div class="modal-body" id="opr-prompt-content"><!-- 提示内容 --></div>'+
                            '<div class="modal-footer">'+
                                '<button class="btn btn-default h-element-gap" data-dismiss="modal">取消</button>'+
                                '<button class="btn btn-success h-element-gap" id="prompt-confirm-btn">确认</button>'+
                            '</div>'+
                        '</div>'+
                    '</div>'+
                '</div>';

/* 操作弹出框 */
var handlerModal = '<div class="modal fade" id="handler-common-model" tabindex="-1" role="dialog" style="overflow-y:scroll;" '+ 
                   'aria-labelledby="handler-common-title" aria-hidden="true" data-backdrop="static">'+
                        '<div class="modal-dialog">'+
                            '<div class="modal-content">'+
                                '<div class="modal-header bg-green">'+
                                    '<button type="button" class="close handler-common-close" data-dismiss="modal" aria-hidden="true">&times;</button>'+
                                    '<h4 class="modal-title" id="handler-common-title"><!-- 标题 --></h4>'+
                                '</div>'+
                                '<div class="modal-body" id="handler-common-content"><!-- 内容 --></div>'+
                            '</div>'+
                        '</div>'+
                    '</div>';

/* 判断modal是否已经显示了 */
function modal2show(selector){
    setTimeout(function(){ 
        $(selector).show();
        if (!$(selector).hasClass("in")) { $(selector).addClass('in'); }
    }, 200);
}
function modal2hide(selector){
    $(selector).hide();
    if ($(selector).hasClass("in")) { $(selector).removeClass('in'); }
}
/* 操作modal的显示 */
function showCommHandlerModal(title, resp, status, xhr){
    /* 判断是否存在div */
    if($("#handler-common-model").length <= 0){
        $("body").append(handlerModal);
        $("#handler-common-model").delegate(".handler-common-close", "click", function(){
            modal2hide("#handler-common-model");
        });
    }
    // 先清空历史数据，再重新赋值，不然会造成内存泄露
    $("#handler-common-title").empty();
    $("#handler-common-content").empty();

    $("#handler-common-title").html(title);
    $("#handler-common-content").html(resp);
    // 延时显示
    modal2show("#handler-common-model");
}

function hideCommHandlerModal(){
    modal2hide("#handler-common-model");
}

/* 更新提示模态框信息 */
function promptModelMsg(sContent, confirmfunc, funcargs){
    /* 判断是否存在div */
    if($("#opr-prompt-model").length <= 0){
        $("body").append(promptTpl);
    }
    // 提示内容赋值
    $("#opr-prompt-content").empty();
    $("#opr-prompt-content").html(sContent);
    // 显示模态框
    $('#opr-prompt-model').modal('show');
    // 确认后事件绑定 - 先移除事件绑定，然后再绑定
    $("#prompt-confirm-btn").unbind('click');
    // 事件绑定
    $("#prompt-confirm-btn").click(function(){
        delayCallbackForPrompt(confirmfunc, funcargs);
    });
}

function delayCallbackForPrompt(callback, funcargs){
    $('#opr-prompt-model').modal('hide');
    setTimeout(function(){
        $('#opr-prompt-model').removeClass('in');
        if (typeof(callback) != 'undefined') { callback(funcargs); }
    }, 500);
}

/* 隐藏提示模态框 */
function hideTipModel(){
    modal2hide("#opr-tip-model");
}

/* 更新提示模态框信息 */
function updateTipModelMsg(isSuc, sContent){
    /* 判断是否存在div */
    if($("#opr-tip-model").length <= 0){
        $("body").append(retTipTpl);
    }
    // 先隐藏之前的提示框，再显示
    hideTipModel();
    // 移除对立的class
    $("#opr-tip-title").empty();
    if (isSuc === 0 || isSuc) {
        $("#opr-tip-header").removeClass("bg-red").addClass("bg-green");
        $("#opr-tip-title").html("操作成功");
    } else {
        $("#opr-tip-header").removeClass("bg-green").addClass("bg-red");
        $("#opr-tip-title").html("操作失败");
    }
    // 提示内容赋值
    $("#opr-tip-content").empty();
    $("#opr-tip-content").html(sContent);
    // 显示模态框
    $('#opr-tip-model').modal('show');
}

function loadingTipModel(status){
    /* 判断是否存在div status -- 'show' or 'hide' */
    if($("#loading-prog-model").length <= 0){
        $("body").append(loadingTpl);
    }
    // 显示 or 隐藏加载进度条
    $('#loading-prog-model').modal(status);
}

function delayCallbackForAsyncSpec(callback, selector, resp, status, xhr){
    loadingTipModel('hide');
    setTimeout(function(){
        $('#loading-prog-model').removeClass('in');
        callback(selector, resp, status, xhr);
    }, 500);
}

function delayCallbackForAsync(callback, resp, status, xhr){
    loadingTipModel('hide');
    setTimeout(function(){
        $('#loading-prog-model').removeClass('in');
        callback(resp, status, xhr);
    }, 500);
}

function assignSelectorHtml(selector, resp, status, xhr){
    // 先清空再赋值，以免内存泄露
    $(selector).empty();
    $(selector).html(resp);
}

/* 静默动态加载页面通用函数 */
function ajaxSilentGetContent(surl, selector, sucsfunc){
    // 异步加载内容
    $.ajax({
        url: surl, 
        type: "GET",
        success: function(resp, status, xhr) {
            sucsfunc(selector, resp, status, xhr);
        }
    });
}

function ajaxSilentPostContent(surl, odata, dtype, selector, sucsfunc){
    // 异步加载内容
    $.ajax({
        url: surl, 
        type: "POST",
        data: odata,
        dataType: dtype,
        success: function(resp, status, xhr) {
            sucsfunc(selector, resp, status, xhr);
        }
    });
}

/* 动态加载页面通用函数 */
function ajaxGetContent(surl, selector, sucsfunc){
    // 异步加载内容
    $.ajax({
        url: surl, 
        type: "GET",
        beforeSend: function(xhr){
            loadingTipModel('show');
        },
        success: function(resp, status, xhr) {
            delayCallbackForAsyncSpec(sucsfunc, selector, resp, status, xhr);
        },
        complete: function(xhr, status) {
            loadingTipModel('hide');
        }
    });
}

/* 动态加载页面通用函数 */
function ajaxPostContent(surl, odata, dtype, sucsfunc){
    // 异步加载内容
    $.ajax({
        url: surl, 
        type: "POST",
        data: odata,
        dataType: dtype,
        beforeSend: function(xhr){
            // 显示加载进度条
            loadingTipModel('show');
        },
        success: function(resp, status, xhr) {
            if (resp.sucs == 0) {
                delayCallbackForAsync(sucsfunc, resp, status, xhr);
            } else {
                updateTipModelMsg(false, resp.msg);
            }
        },
        complete: function(xhr, status) {
            loadingTipModel('hide');
        }
    });
}

function hasAjaxLoadOver(selector){
    /* 加载更多判断是否已经加载完毕了 */
    // 获取当前的条数
    var skip = parseInt($(selector + " .ajax-skip-num").text());
    var total = parseInt($(selector + " .ajax-total-num").text());
    // 判断是否加载完毕了
    if (skip >= total) {
        updateTipModelMsg(false, "已加载完毕！");
        $(selector + " .ajax-total-num").text(skip);
        $(selector + " .ajax-more-label").text("已加载完毕！");
        return 0;
    } else {
        return skip
    }
}

function switchSpecGroupDivShow(menuselector, itemselector){
    /* 初始化第一个为显示，其他的隐藏 */
    $(itemselector).hide();
    $(itemselector + ':first').show();
    /* 初始化按钮状态 */
    $(menuselector + ':first').attr("disabled", true);

    /* 事件绑定 */
    $(menuselector).click(function(){
        $(itemselector).hide();
        $('#'+$(this).attr('data')).show();
        // 设置按钮状态
        $(menuselector).attr("disabled", false);
        $(this).attr("disabled", true);
    });
}

function bindAjaxMore(selector, surl, sucfunc){
    /* 加载更多事件绑定 */
    $(selector+" .ajax-more-btn").click(function(){
        skip = hasAjaxLoadOver(selector);
        if (skip > 0) {
            var data = {"meth": "more", "skip":skip, 
                        "extra": $(this).children("input:eq(0)").val(),
                        "_xsrf": $(this).children("input:eq(1)").val() };
            // post 动态加载数据
            ajaxPostContent(surl, data, "json", sucfunc);
        }
    });
}

/* 表格序号自动添加 */
function updateTableIdx(selector, idx) {
    var stIdx = 1
    if (idx > 0) { stIdx = idx; }
    var len = $(selector + ' tr').length;
    var fRowTd = $(selector + ' tr:eq(1) td:first');
    
    if (typeof(fRowTd.attr("colspan")) == "undefined") {
        for(var i=stIdx; i<len; i++) {
            $(selector + ' tr:eq(' + i + ') td:first').text(i);
        }
    }
    // 行交替显示颜色
    $(selector + " tr:odd").css("background-color", "#fff"); 
    $(selector + " tr:even").css("background-color", "#eee");
    // 第一标题行颜色重赋值
    $(selector + " tr:eq(0)").addClass("bg-green");
}

function delegateTblRowColor(selector){
    // 表格行颜色替换选中事件委托
    $(selector).delegate('tr:gt(0)', {
        click: function(){ 
            $(this).addClass("mouse-over-color"); 
        },
        mouseover: function(){ 
            $(this).addClass("mouse-over-color"); 
        }, 
        mouseout: function(){ 
            $(this).removeClass("mouse-over-color");
        } 
    });
}

/* 动态tab页初始化 */
var AjaxTabCache = {}
function ajaxTabsInit(selector) {
    AjaxTabCache[selector] = $(selector).tabs();
    // tab关闭图标的关闭事件委托
    AjaxTabCache[selector].delegate("span.ui-icon-close", "click", function() {
        var wtRmLiEle = $(this).closest("li");
        var tabDivId = wtRmLiEle.attr("aria-controls");

        /* 移除tab标签li和tab内容div */
        wtRmLiEle.remove();
        $("#" + tabDivId).remove();

        /* 刷新 tab 显示 */
        AjaxTabCache[selector].tabs("refresh");
    });
}

function ajaxTabsFocus(selector, tabid) {
    // 激活指定id的tab标签页
    var tabIdx = AjaxTabCache[selector].children('.ui-tabs-nav').children('li[aria-controls="' + tabid + '"]').index();
    /* 判断是否已存在，若存在则切换，不存在，则动态加载 */
    if (tabIdx >= 0) {
        AjaxTabCache[selector].tabs("option", "active", tabIdx);
        return true;
    } else {
        return false;
    }
}

function updateAsyncAjaxTabMenu(selector, resp, tabItem, tabid){
    AjaxTabCache[selector].children(".ui-tabs-nav").append(tabItem);
    AjaxTabCache[selector].append("<div id='" + tabid + "'>" + resp + "</div>");
    AjaxTabCache[selector].tabs("refresh");
    // 显示新建的tab页
    ajaxTabsFocus(selector, tabid);
}

/* 切换（增加）tab页 */
function ajaxTabsAppend(selector, surl, title, tabid) {
    /* 讲 id 里面的非法字符去掉 */
    tabid = tabid.replace(/\//g, '');
    /* 判断是否已存在，若存在则切换，不存在，则动态加载 */
    if ( ajaxTabsFocus(selector, tabid) !== true ) {
        var tabItem = "<li aria-controls='" + tabid +"'><a href='#" + tabid + "'>" + title + 
                          "</a><span class='ui-icon ui-icon-close' style='float:right;' role='presentation'>Remove Tab</span></li>";
        /* 异步加载内容 */
        $.ajax({
            url: surl, 
            type: "GET",
            beforeSend: function(xhr){
                loadingTipModel('show');
            },
            success: function(resp, status, xhr) {
                delayCallbackForAsyncSpec(updateAsyncAjaxTabMenu, selector, resp, tabItem, tabid);
            },
            complete: function(xhr, status) {
                loadingTipModel('hide');
            }
        });
    }
}


function ajaxFormEvent(selector, sucsfunc, beforefunc, completefunc){
    // form 表单 ajax 请求事件绑定
    $(selector).ajaxForm({
        dataType: 'json',
        beforeSend: function(xhr){
            loadingTipModel('show');
            if (typeof(beforefunc) != 'undefined'){ beforefunc(xhr); }
        },
        success: function(resp, status, xhr) {
            if (typeof(sucsfunc) != 'undefined'){
                delayCallbackForAsync(sucsfunc, resp, status, xhr);
            } else {
                commFormHandler(resp, status, xhr);
            }
        },
        complete: function(xhr, status){
            loadingTipModel('hide');
            if (typeof(completefunc) != 'undefined'){ completefunc(xhr, status); }
        }
    });
}

function authFormHandler(resp, status, xhr){
    // 判断auth是否成功，如果auth成功，则跳转到制定页面
    if (resp.sucs == 0) {
        // 判断是否需要输出提示信息
        if (resp.msg) { 
            updateTipModelMsg(true, resp.msg);
            // 延时重定向
            setTimeout(function(){
                if (resp.redirect) { location.href = resp.redirect; }
            }, 3000);
        } else {
            // 直接重定向
            if (resp.redirect) { location.href = resp.redirect; }
        }
    } else {
        updateTipModelMsg(false, resp.msg);
    }
}

function getGlobalCommXsrf(){
    return $('#global-comm-xsrf input').val();
}

function commFormHandler(resp, status, xhr){
    if (resp.sucs == 0) {
        updateTipModelMsg(true, resp.msg);
    } else {
        updateTipModelMsg(false, resp.msg);
    }
}

function delayShowPaymentModal(wtHideModal){
    updateTipModelMsg(false, "余额不足，请充值后再重新进行操作。");
    /* 提示跳转到第三方支付页面，还是提示充值页面（暂定）
    updateTipModelMsg(false, "余额不足，请充值后再重新进行操作，3秒后将自动跳转到充值页面......");
    // 延时重定向
    setTimeout(function(){
        if (typeof(wtHideModal) != 'undefined'){ $(wtHideModal).modal('hide'); }
        $('#opr-tip-model').modal('hide');
        $('#handler-recharge-modal').modal('show');
    }, 3000);
    */
}

$(document).ready(function() {
    /* 认证页面（注册、登录）事件绑定 */
    ajaxFormEvent('.authform', authFormHandler);

    /* 验证码图片点击更新事件绑定 */
    $('#imgcaptcha').bind("click", function() {
        var timestamp = new Date().getTime();
        $(this).attr("src", '/captcha.png?' + timestamp);
    });
});




